为什么 QTextDocument 背景颜色只改变一次?答案

您所在的位置:网站首页 qml fontfamily 为什么 QTextDocument 背景颜色只改变一次?答案

为什么 QTextDocument 背景颜色只改变一次?答案

2023-04-11 07:58| 来源: 网络整理| 查看: 265

原因

QTextDocument::setDefaultStyleSheet 的文档说:

注意:更改默认样式表不会对文档的现有内容产生任何影响。

您尝试通过在setDefaultStyleSheet 之后调用setHtml 来克服这个问题:

m_doc->setHtml(m_doc->toHtml());

但是,这不会产生预期的结果,因为setDefaultStyleSheet 实际上是通过bgcolor CSS 属性将背景颜色嵌入 HTML 中。

要对此进行测试,请添加

m_doc->setHtml("

Test

"); qDebug() toHtml();

之后

m_doc->setHtml(m_doc->toHtml());

来自;html;;body;;p;Test;/p;;/body;;/html; 的m_doc 的HTML 内容在使用#FF00FF 进行测试时变为:

"\n\np, li { white-space: pre-wrap; }\n\n

Test

"

注意:请注意分配:bgcolor=\"#ff00ff\。

因此,通过编写m_doc-;setHtml(m_doc-;toHtml());,您可以有效地返回旧颜色。这就是为什么颜色只在第一次改变的原因。

顺便说一下,这个小部件现在改变了它的颜色,但是已经丢失了它的内容。

解决方案

很难找到一个优雅的解决方案,因为在这种情况下,标记和样式并没有像真正的HTML 和CSS 那样分开,但是样式是由Qt 嵌入到标记中的。我想到的一件事是手动解析m_doc的内容。

注意:这样的解决方案非常脆弱,我强烈反对。也许不使用样式表,而是通过设置小部件的调色板来更改背景颜色,这会在屏幕上呈现 QTextDocument 的内容。

注意:在任何情况下,这似乎都不是预期的行为,至少它与文档中的描述不匹配,所以我会将其作为错误报告给 Qt,如果我你是吗?

示例

这是我为您编写的一个示例,用于演示建议的解决方案:

void DocumentHandler::setBackgroundColor(const QColor &color) { const QString &bgcolor("bgcolor=\""); QString html(m_doc->toHtml()); int n = html.indexOf(bgcolor, html.indexOf("setHtml(html); m_backgroundColor = color.name(); // QColor variable emit backgroundColorChanged(); }


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3